home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / program / tsetguid.zip / TEA / SET / SAMPLE / FILETREE.JAV < prev    next >
Text File  |  1997-02-27  |  4KB  |  118 lines

  1. /*
  2.  * Copyright (c) 1996-1997, InetSoft Technology Corp, All Rights Reserved.
  3.  *
  4.  * The software and information contained herein are copyrighted and 
  5.  * proprietary to InetSoft Technology Corp. This software is furnished 
  6.  * pursuant to a written license agreement and may be used, copied, 
  7.  * transmitted, and stored only in accordance with the terms of such 
  8.  * license and with the inclusion of the above copyright notice. Please 
  9.  * refer to the file "COPYRIGHT" for further copyright and licensing 
  10.  * information. This software and information or any other copies 
  11.  * thereof may not be provided or otherwise made available to any 
  12.  * other person. 
  13.  */
  14. package tea.set.sample;
  15.  
  16. import tea.set.*;
  17. import java.awt.*;
  18. import java.awt.event.*;
  19. import java.io.*;
  20.  
  21. /**
  22.  * FileTree is an example program to demostrate Forest widget. It 
  23.  * takes a path, and generates a directory tree.
  24.  *
  25.  * Bug: Win32 has a bug which hangs a program is the number of 
  26.  * component is too large. This would be a problem if the tree contains
  27.  * too many nodes, since each node is implemented as a component
  28.  * in Tea Set 1.2. In Tea Set Widget Collection 1.2.1, nodes are no 
  29.  * longer components and therefore this problem would not appear.
  30.  *
  31.  * @see Forest
  32.  * @version 1.3, 01/31/97
  33.  * @author InetSoft Technology Corp
  34.  */
  35. public class FileTree extends Frame {
  36.    /**
  37.     * Create a directory tree from the root path.
  38.     */
  39.    public FileTree(String rootPath) {
  40.       setLayout(new BorderLayout());
  41.     
  42.       // create Forest and set appropriate options
  43.       forest = new Forest(Forest.LINE);
  44.       // use the same separator as the file system for separating nodes
  45.       forest.setSeparator(File.separatorChar);
  46.       // open/close folder only if mouse click is in icon
  47.       forest.setIconOnly(true);
  48.       
  49.       // create nodes
  50.       populateTree(rootPath);
  51.       
  52.       // never close root folder
  53.       forest.forceOpen(rootPath, true);
  54.       
  55.       // put forest inside a Scroller to ensure all parts of forest
  56.       // can be seen
  57.       add("Center", new Scroller(forest, true, 200, 200));
  58.       forest.addActionListener(new ActionListener() {
  59.      public void actionPerformed(ActionEvent e) {
  60.         System.out.println("Action:"+forest.getSelectedPath());
  61.      }
  62.       });
  63.       forest.addItemListener(new ItemListener() {
  64.      public void itemStateChanged(ItemEvent e) {
  65.         System.out.println("Select:"+e);
  66.      }
  67.       });
  68.       
  69.       Button cancel = new Button("Cancel");
  70.       add("North", cancel);
  71.       cancel.addActionListener(new ActionListener() {
  72.      public void actionPerformed(ActionEvent e) {
  73.         FileTree.this.dispose();
  74.         System.exit(0);
  75.      }
  76.       });
  77.    }
  78.  
  79.    // populate the tree nodes from the directory information.
  80.    private void populateTree(String rootPath) {
  81.       // add current dir/file to the tree
  82.       forest.add(rootPath);
  83.       
  84.       try {
  85.      File root = new File(rootPath);
  86.      
  87.      if(root.isDirectory()) {
  88.         String[] files = root.list();
  89.         
  90.         if(files != null) {
  91.            // recursively add all sub nodes to the tree
  92.            for(int i = 0; i < files.length; i++) {
  93.           populateTree(rootPath + File.separator + files[i]);
  94.            }
  95.         }
  96.      }
  97.       }
  98.       catch(Exception e) {
  99.      e.printStackTrace();
  100.       }
  101.    }
  102.    
  103.    /**
  104.     * Pass a directory path as command line parameter. On Win32 platform,
  105.     * beware that the backslash needs to be escaped.
  106.     * For a directory tree from current directory, type:
  107.     * java tea.set.sample.FileTree .
  108.     */
  109.    public static void main(String argv[]) {
  110.       FileTree tree = new FileTree(argv[0]);
  111.       
  112.       tree.pack();
  113.       tree.show();
  114.    }
  115.    
  116.    private Forest forest;
  117. }
  118.